op {
  graph_op_name: "FFTND"
  in_arg {
    name: "input"
    description: <<END
A complex tensor.
END
  }
  in_arg {
    name: "fft_length"
    description: <<END
An int32 tensor. The FFT length for each dimension.
END
  }
  in_arg {
    name: "axes"
    description: <<END
An int32 tensor with a same shape as fft_length. Axes to perform the transform.
END
  }
  out_arg {
    name: "output"
    description: <<END
A complex tensor of the same shape as `input`. The designated
dimensions of `input` are replaced with their Fourier transforms.

@compatibility(numpy)
Equivalent to np.fft.fftn.
@end_compatibility
END
  }
  summary: "ND fast Fourier transform."
  description: <<END
Computes the n-dimensional discrete Fourier transform over
designated dimensions of `input`. The designated dimensions of
`input` are assumed to be the result of `FFTND`.

If fft_length[i]<shape(input)[i], the input is cropped. If
fft_length[i]>shape(input)[i], the input is padded with zeros. If fft_length
is not given, the default shape(input) is used.

Axes mean the dimensions to perform the transform on. Default is to perform on
all axes.
END
}